#ifndef PAGINATION_H
#define PAGINATION_H

#include "../../../../kegui_global.h"

#include "totalitem.h"
#include "gotopageinput.h"
#include "sizepagecombox.h"

#include <QWidget>
#include <QPushButton>
#include <QPaintEvent>


namespace kepen {
namespace core {

class KEGUI_EXPORT Pagination : public QWidget
{
    Q_OBJECT
public:
    explicit Pagination(QWidget *parent = nullptr);

    ~Pagination() ;

public:
    /**
     * @brief SetTotalItem 设置总条目的显示
     * @param nTotal 总条目
     */
    void SetTotalItem(int nTotal);

    /**
     * @brief SetItemPerPage 设置每页显示多少条目
     * @param args 条目数组，数组元素必须大于0，且后面数必须大于前面
     * @param size 数组大小
     */
    void SetItemPerPage(int* args, int size);

    /**
     * @brief Refresh 设置完条目或者每页条目后必须调用该函数刷新
     */
    void Refresh();

protected:
    void Init();
    void paintEvent(QPaintEvent* event) override;

private:
    /**
     * @brief FindPage 找到某页
     * @param nIndex 要查找的页数，从1开始
     * @return 返回找到的页数按钮，没有则返回空
     */
    QPushButton* FindPage(int nIndex) const;

    /**
     * @brief ClearPage 清除所有页
     */
    void ClearPage();

    /**
     * @brief ChangeView 修改页数的显示
     * @param currentPage 当前页数
     */
    void ChangeView(int currentPage);

    /**
     * @brief GetPageItem  获取m_pHPageLayout里面的第nPos按钮
     * @param nPos 要获取的按钮的位置，nPos的索引从0开始
     * @return 返回找到的按钮
     */
    QPushButton* GetPageItem(int nPos);

    /**
     * @brief Reload 重新加载分页
     */
    void Reload();

private:
    QHBoxLayout* m_pHMainLayout;
    QHBoxLayout* m_pHPageLayout; // 存放页数
    QPushButton* m_pBtnLeft;
    QPushButton* m_pBtnRight;
    QPushButton* m_pBtnOmitFront; // 前面的省略号
    QPushButton* m_pBtnOmitBack; // 后面的省略号
    TotalItem* m_pTotalItem;
    SizePageCombox* m_pItemEachPage;
    GotoPageInput* m_pGotoItem;
    int m_nCurrentPage; // 当前页数
    int m_nMaxPage; // 最大页数
    int m_nDisplayPage; // 显示的页数
    std::vector<QPushButton*> m_vecPageBtn;

Q_SIGNALS:
    void GotoPageSignals(int nPage); // 页码变化
    void NumberPerPageChanged(int nCount); // 每页条码变化

private Q_SLOTS:
    void btn_page_clicked();
};


}
}

#endif // PAGINATION_H
